import * as vscode from 'vscode'

/**
 * 悬浮提示提供者类
 * 为4GL语言提供悬浮提示功能
 */
export class MyHoverProvider implements vscode.HoverProvider {
	/**
	 * 4GL关键字数组
	 * 用于识别和提示4GL关键字
	 */
	private keywords = [
		'database', 'display', 'input', 'construct', 'by', 'from', 'where',
		'select', 'insert', 'update', 'delete', 'create', 'alter', 'drop',
		'table', 'index', 'view', 'function', 'return', 'if', 'then', 'else',
		'while', 'for', 'foreach', 'end', 'let', 'define', 'main'
		// 可以继续添加更多4GL关键字...
	]

	/**
	 * 提供悬浮提示函数
	 * 当用户将鼠标悬停在代码上时显示提示信息
	 * @param document 当前文档
	 * @param position 光标位置
	 * @param token 取消令牌
	 * @returns 悬浮提示信息
	 */
	provideHover(
		document: vscode.TextDocument, 
		position: vscode.Position, 
		token: vscode.CancellationToken
	): vscode.ProviderResult<vscode.Hover> {
		// 获取光标位置的单词范围
		const wordRange = document.getWordRangeAtPosition(position)
		if (!wordRange) {
			return null
		}

		// 获取单词文本
		const word = document.getText(wordRange)
		
		// 检查是否是纯小写字母组成的单词，并且是4GL关键字
		const pattern = /^[a-z]{2,}$/
		if (pattern.test(word) && this.keywords.includes(word.toLowerCase())) {
			return new vscode.Hover(`"${word}" 是4GL关键字,最好大写`)
		}

		return null
	}
}